package com.six.backend.service;

import com.six.backend.pojo.MultipartFileParam;
import com.six.backend.pojo.PreviewData;
import com.six.backend.pojo.SourceMaterial;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Transactional
/**
 * @Author: skyler
 * @Date: 2021/11/10 10:59
 */
public interface SourceMaterialService {
    /**
     * 查看用户当前所参加会议的图片素材信息
     * @param map pageSize:页面大小 pageNum:页数
     * @param account account: 用户的账号
     * @return 素材的集合
     */
    List<SourceMaterial> selectImgSourceMaterialByName(HashMap map,String account);

    /**
     * 查看用户当前所参加会议的多媒体素材信息
     * @param map（pageSize:页面大小 pageNum:页数 account: 用户的账号)
     * @return 多媒体素材的集合
     */
    List<SourceMaterial> selectVedioSourceMaterialByName(HashMap map);

    /**
     * 查看用户当前所参加会议的文档素材信息
     * @param map pageSize:页面大小 pageNum:页数 name: 文档名称)
     * @return 多媒体素材集合
     */
    List<SourceMaterial> selectDocumentSourceMaterialByName(Map map);

    /**
     * 查看用户当前所参加会议的文档图片信息
     * @param map 素材的信息
     * @param id   素材的id
     * @throws FileNotFoundException 抛出文件找不到的异常
     * @return 返回删除的状态
     */
    String deleteDocumentByName(HashMap map,String id) throws FileNotFoundException;

    /**
     * 存储素材相关信息
     * @param sourceMaterial: 要存储的素材
     * @param uploadFile     用户传进来的文件
     * @throws IOException 抛出io异常
     */
    String save(SourceMaterial sourceMaterial,MultipartFile uploadFile) throws IOException;

    /**
     * 查找素材资源
     * @param map: 要查找素材的信息
     * @return SourceMaterial: 所返回的素材的信息
     */
    SourceMaterial selectSourceById(HashMap map);

    /**
     * 存储大文件分片信息
     * @param multipartFileParam 传来的分片文件的相关信息
     * @param response 返回头
     * @throws IOException 抛出io异常
     */
    String chunkUpload(MultipartFileParam multipartFileParam, HttpServletResponse response, HttpServletRequest request,String auther,Integer conferneceId) throws IOException;

    /**
     * 存储视频文件信息到数据库
     * @param sourceMaterial 视频文件相关信息
     * @return 判断是否保存成功
     */
    boolean saveVideoSource(SourceMaterial sourceMaterial);

    /**
     * 查询历史会议数据
     * @param account 用户账户
     * @param name 用户输入的要查询的信息
     * @return 信息的集合
     */
    List<PreviewData> getPreviewData(String account, String name);

    /**
     * 检查数据库是否有相同的素材资源
     * @param id 素材的id
     * @param conferenceId 会议id
     * @return 是否有相同的素材 是:true 否:false
     */
    String checkSource(String id,Integer conferenceId);
}
